module main

fn main() {
	try_propagation() or { println("captured: $err") }
}

fn try_propagation() ? {
	try_numbers()?
}

fn try_numbers() ? {
	for x in 1 .. 10 {
		y := error_if_even(x) or { x + 1 }
		println("$x rounded to $y")
		error_if_prime(y)?
	}
}

fn error_if_even(num int) ?int {
	if num % 2 == 0 { return error('number is even') }
	return num
}

fn error_if_prime(num int) ?int {
	for i in 2..num {
		if num % i == 0 {
			return error('$num is prime')
		}
	}
	return num
}
